# -*- coding=utf8 -*-
import scrapy
# 强制将编码转换为UTF-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')

from ..items import BirdItem
class BirdSpider(scrapy.Spider):
    name = "bird"
    allowed_domains = ["runoob.com"]
    start_urls = [
        "http://www.runoob.com/"
    ]

    def parse(self, response):
        # 实例化一个BirdItem()
        data = BirdItem()
        # 要打印的字符串
        text = ''
        # 循环提取信息，因为总共有10个大标题，再从大标题中提取详细的信息
        for i in range(1, 11):
            # 提取大标题信息的语句，返回为列表形式
            model = response.xpath('//div[@class="codelist codelist-desktop cate' + str(i) + '"]/h2/text()').extract()
            # 提取 所有二级标题的信息，返回为列表形式
            title_all = response.xpath('//div[@class="codelist codelist-desktop cate' + str(i) + '"]/a/h4/text()').extract()
            # 提取 所有标题介绍的信息，返回为列表形式
            content_all = response.xpath('//div[@class="codelist codelist-desktop cate' + str(i) + '"]/a/strong/text()').extract()
            # 提取 所有图片链接的信息，返回为列表形式
            image_all = response.xpath('//div[@class="codelist codelist-desktop cate' + str(i) + '"]/a/img/@src').extract()
            # 添加一个大标题，并换行
            text = text + model[0] + '\n'
            # 存入数据库操作，先给model赋值
            data['model'] = model[0]
            # 二级标题和图片，介绍的个数是相同的，使用for遍历
            for l in range(0, len(title_all)):
                # item为数据的主键，不能相同
                data['item'] = str(i*100+l)
                data['title'] = title_all[l]
                data['picture'] = image_all[l]
                data['content'] = content_all[l]
                # 返回提取到的数据信息
                yield data
                # 把大标题对应的二级标题，介绍，图片都添加text字符串
                text = text + title_all[l] + content_all[l] + '  图标链接：' + image_all[l] + '\n'

        # 将text中的文本信息打印到bird.txt文件中
        f = open('bird.txt', 'ab')
        f.write(text)
        f.close()
